﻿using CloudStorageLight.WpfClient.Properties;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace CloudStorageLight.WpfClient
{
    public class CachedFile
    {
        /// <summary>
        /// Id（ファイルパスなどから構成）
        /// </summary>
        public string Id { get; set; }

        /// <summary>
        /// キャッシュしているフォルダ
        /// </summary>
        public string CacheFolder { get; set; }

        /// <summary>
        /// Server パス
        /// </summary>
        public string Path { get; set; }

        /// <summary>
        /// ローカルパス
        /// </summary>
        public string LocalPath { get; set; }

        /// <summary>
        /// ローカルファイル更新時間
        /// 
        /// ダウンロードやアップロードしたタイミング設定。
        /// キャッシュしたファイルの更新時間を利用。
        /// この時刻比較することで変更の有無をチェック。
        /// </summary>
        public DateTime? LocalFileCachedTime { get; set; }

        /// <summary>
        ///サーバ側ファイル更新時刻(UTC)
        /// </summary>
        public DateTime LastModified { get; set; }

        /// <summary>
        /// ローカルファイルのアクセス時刻（最近利用したファイルに利用される。期限切れの削除などに利用される）
        /// </summary>
        public DateTime LastAccessTime { get; set; }

        /// <summary>
        /// ダウンロードしたファイルのバージョン
        /// </summary>
        public string SnapshotTime { get; set; }

        public bool IsDirty
        {
            get 
            {
                if (!File.Exists(LocalPath)) return false;
                if (!LocalFileCachedTime.HasValue) return true;
                var info = new FileInfo(LocalPath);
                if (LocalFileCachedTime == info.LastWriteTime) return false;
                return true;
            }
        }
        public bool IsEditing
        {
            get
            {
                if (!File.Exists(LocalPath)) return false;
                var info = new FileInfo(LocalPath);
                if (info.IsReadOnly) return false;
                return true;
            }
        }


        public bool IsDownloaded
        {
            get
            {
                return File.Exists(LocalPath); ;
                
            }
        }

        //public string ErrorMessage { get; set; }

    }
}
